<?php

namespace maotool\util;

use maotool\exception\RuntimeException;

/**
 * php 脚本执行帮助类
 */
class PhpUtil
{

    /**
     * 获取当前 PHP 解释器的可执行文件路径
     * @return string
     */
    public static function getBinaryPath()
    {
        return PHP_BINARY;
    }

    /**
     * 获取 PHP 可执行文件的目录路径
     * @return string
     */
    public static function getBinDirectory()
    {
        return PHP_BINDIR;
    }

    /**
     * 获取当前加载的 php.ini 配置文件路径
     * @return string
     * @throws RuntimeException 如果未找到 php.ini 文件
     */
    public static function getIniPath()
    {
        $iniPath = php_ini_loaded_file();
        if ($iniPath === false) {
            throw new RuntimeException('php.ini file not found.');
        }
        return $iniPath;
    }

    /**
     * 获取当前 PHP 版本号
     * @return string
     */
    public static function getVersion()
    {
        return PHP_VERSION;
    }

    /**
     * 获取当前加载的 PHP 扩展列表
     * @return array
     */
    public static function getLoadedExtensions()
    {
        return get_loaded_extensions();
    }

    /**
     * 检查指定的 PHP 扩展是否已加载
     * @param string $extensionName 扩展名称
     * @return bool
     */
    public static function isExtensionLoaded($extensionName)
    {
        return extension_loaded($extensionName);
    }

    /**
     * 获取指定 PHP 配置项的值
     * @param string $configName 配置项名称
     * @return string
     */
    public static function getConfigValue($configName)
    {
        return ini_get($configName);
    }

    /**
     * 获取当前 PHP 运行模式
     * @return string
     */
    public static function getRunMode()
    {
        return PHP_SAPI;
    }

    /**
     * 判断当前是否以 CLI 模式运行
     * @return bool
     */
    public static function isCliMode()
    {
        return PHP_SAPI === 'cli';
    }

    /**
     * 判断当前是否是调试模式运行
     * @return bool
     */
    public static function isDebug()
    {
        return PHP_DEBUG > 0;
    }

}